home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
doc.exe
/
FILES.DOC
< prev
next >
Wrap
Text File
|
1992-02-14
|
15KB
|
423 lines
─────────────────────────────────────────────────────────────────────────────
Dokumentation zur Datei: FILES.INC
─────────────────────────────────────────────────────────────────────────────
FILES.INC - Routinen zum Bearbeiten von Dateien
(für den Assembler A86)
(c) Bernd Schemmer 1990 - 1992
Letzter Update: 12.02.1992
■ Hinweis:
----------
Die Routinen benutzen das Register AX als Arbeitsregister.
Puffer für Dateinamen müssen, falls nichts anderes angegeben ist,
Platz für 64 Zeichen haben.
Zum Abfangen von Hardware-Fehler (z.B. offene Diskettenlaufwerke)
sollte zusätzlich ein eigener Handler für den Interrupt 24h verwendet
werden.
■ Variablen:
------------
FindAttribute - Word, Suchattribute für SearchFirst
und SearchNext
Durch Ändern dieser Variable können mit diesen beiden Routinen
also auch Directorys oder Volumes gesucht werden. Ebenfalls
können dann die Größe, das Datum und die Zeit von Directorys
aus der DTA entnommen werden.
■ Routinen:
-----------
ExistFile - Stellt fest, ob eine Datei existiert
GetSetAttributes - Liest oder Setzt die Attribute einer Datei
DeleteFile - Löscht eine Datei
CopyFile - Kopiert eine Datei
RenameFile - Benennt eine Datei um
GetFileSize - Ermittelt die Größe einer Datei
GetFileDate - Liest das Datum einer Datei
GetFileTime - Liest die Zeit einer Datei
SetFileTime - Setzt die Zeit einer Datei
SetFileDate - Setzt das Datum einer Datei
FindFirst - Sucht die erste unter eine Maske fallende Datei
FindNext - Sucht die jeweils nächste unter eine Maske
fallende Datei
ParseFileName - Splittet einen Dateinamen in Pfad und Namen auf
GetFilePath - Ermittelt den Pfad einer Datei
FileTimeToDOSTime - Konvertiert eine Zeitangabe vom Datei- ins
DOS-Format
FileDateToDOSDate - Konvertiert eine Datumsangabe vom Datei- ins
DOS-Format
DOSTimeToFileTime - Konvertiert eine Zeitangabe vom DOS- ins
Datei-Format
DOSDateToFileDate - Konvertiert eine Datumsangabe vom DOS- ins
Datei-Format
und falls nötig:
DOSStrToStr - Konvertiert einen DOS-String ins Stringformat
■ EQU-Anweisungen für die Attribute eines Directory-Eintrages
Archiv EQU 020h
SubDir EQU 010h
Volume EQU 008h
System EQU 004h
Hidden EQU 002h
Readonly EQU 001h
■ Suchattribute für FindFirst und FindNext
; Voreinstellung für die Attribute
DefaultAttr EQU Archiv OR ReadOnly
FindAttribute DW DefaultAttr
■ Aufbau der DTA für die Routinen FindFirst und FindNext,
Länge: 43 Bytes
Deklaration in der aufrufenden Routine:
MyDTA db 43xD dup 0
FindDTA STRUC [BX]
db 21xD dup ? ; reserviert für DOS
_DTAAttr db ? ; Attribut des gefundenen Eintrages
_DTATime dw ? ; Zeit des gefundenen Eintrages
_DTADate dw ? ; Datum des gefundenen Eintrages
_DTALength dw ?,? ; Länge des gefundenen Eintrages
_DTAName db 13xD dup ? ; Name des gefundenen Eintrages (abgeschl.
ENDS ; mit einem Null-Byte)
----------------------------
DOSStrToStr
Funktion: Konvertierung eines DOS-Strings ins String-Format
(mit Zähler, ohne das Zeichen '$' bzw. ein 0-Byte
am Ende)
Eingabe: DS:SI -> Quellstring
ES:DI -> Zielstring (wird auf max. 255 Byte gekürzt)
AL = Ende-Kennzeichen (0-Byte oder '$')
Bes.: Zielstring gleich Quellstring ist nicht erlaubt.
Falls der Quellstring mehr als 255 Zeichen hat, werden
nur die ersten 255 Zeichen übernommen.
----------------------------
GetFilePath
Funktion: Erweitert einen Dateinamen (evtl. incl. Pfad) um den Pfad
Eingabe: DS:SI = Dateiname (als String)
ES:DI = Puffer für den erweiterten Namen (als String)
(128 Zeichen Platz!)
Ausgabe: CF = 0 ->> okay
Puffer bei ES:DI enthält den erweiterten Namen
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Benutzt die undokumentierte Funktion 60h des Interrupt 21h.
Vor der weiteren Benutzung des so ermittelten Dateinamens
muß die Länge überprüft werden, da die Ausgabe der Funktion
60h bis zu 128 Zeichen lang sein kann, aber die Funktionen
zur Dateibearbeitung nur mit Dateinamen mit max. 64 Zeichen
arbeiten.
Benötigt ca. 150 Byte auf dem Stack.
Quellstring gleich Zielstring ist erlaubt
----------------------------
ParseFileName
Funktion: Splittet einen Dateinamen in den Pfad und den Namen auf
Eingabe: DS:SI -> Pfad und Name der Datei (als String)
ES:DI -> Puffer für den Namen (als String)
Ausgabe: DS:SI -> Pfad der Datei (als String)
ES:DI -> Name der Datei (als String)
Bes.: Die beiden Strings müssen verschieden sein!
Erkennt auch den Slash '/' als Pfadtrenner an.
----------------------------
FindFirst
Funktion: Sucht die erste Datei, die unter eine gegebene Suchmaske
fällt (Gesucht wird mit den Attributen aus FINDATTRIBUTE)
Eingabe: DS:DX -> Puffer für die DTA (wird nur zum Suchen benutzt)
DS:SI -> Suchpfad und Maske (als String)
ES:DI -> Puffer für die gefundene Datei (als String)
Ausgabe: CF = 0 ->> Datei gefunden
Puffer bei ES:DI gefüllt
CL = Attribute des Eintrages
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
AX = 18xD ->> keine Datei gefunden
Bes.: Die beiden Strings müssen verschieden sein!
Die 'Original'-DTA wird nicht verändert.
----------------------------
FindNext
Funktion: Sucht die nächste Datei, die unter die gegebene Suchmaske
fällt
Eingabe: DS:DX -> DTA (muß durch vorheriges FindFirst vorbelegt
sein!)
DS:SI -> Suchpfad und Maske (als String)
ES:DI -> Puffer für die gefundene Datei (als String)
Ausgabe: CF = 0 ->> Datei gefunden
Puffer bei ES:DI gefüllt
CL = Attribute des Eintrages
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
AX = 18xD ->> keine Datei gefunden
Bes.: Die 'Original'-DTA wird nicht verändert.
----------------------------
GetFileTime
Funktion: Lesen der Zeit einer Datei
Eingabe: DS:SI -> Dateiname
Ausgabe: CF = 0 ->> okay
CX und DX enthalten die Zeit (Format wie nach
Funktion 2Ch des Interrupt 21h, außer Reg. DL)
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
GetFileDate
Funktion: Lesen des Datums einer Datei
Eingabe: DS:SI -> Dateiname
Ausgabe: CF = 0 ->> okay
CX und DX enthalten das Datum (Format wie nach
Funktion 2Ah des Interrupt 21h, außer Reg. AL)
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
SetFileTime
Funktion: Setzen der Zeit einer Datei
Eingabe: DS:SI -> Dateiname
Register CX und DX enthalten die Zeit (Format wie für die
Funktion 2Dh des Interrupt 21h, außer Register DL)
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
AX = 0 ->> falsches Format
Hinweis: Die Sekunden werden für Dateien nur im 2-Sekunden-
Intervallen gespeichert; die Hundertstel-Sekunden
werden für Dateien nicht gespeichert.
----------------------------
SetFileDate
Funktion: Setzen des Datums einer Datei
Eingabe: DS:SI -> Dateiname
Register CX und DX enthalten das Datum (Format wie für die
Funktion 2Bh des Interrupt 21h)
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
AX = 0 ->> falsches Format
----------------------------
GetFileSize
Funktion: Ermitteln der Größe einer Datei
Eingabe: DS:SI -> Dateiname
Ausgabe: CF = 0 ->> okay
DX:AX = Dateigröße
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
CopyFile
Funktion: Kopieren einer Datei
Eingabe: DS:SI -> alter Dateiname
ES:DI -> neuer Dateiname
DS:BX -> Puffer-Tabelle
Die Tabelle muß vor dem Aufruf der Routine gefüllt
werden, d.h. die aufrufende Routine muß den Speicher
für den Puffer und die Puffer-Tabelle bereitstellen!
Aufbau der Puffer-Tabelle: (Worte im INTEL-Format!)
Offset | Länge | Inhalt
--------+---------+-----------
0 | 1 Wort | Segment des Puffers
2 | 1 Wort | Offset des Puffers
4 | 1 Wort | Länge des Puffers in Byte
| | max. 0FFFFh = 1 Segment
Ausgabe: CF = 0 ->> okay, Datei kopiert
CF = 1 ->> Fehler
AX = Fehlernummer
Bes.: Die im Falle eines Fehlers evtl. schon teilweise erstellte
Zieldatei wird nicht gelöscht.
Der Puffer darf nicht über eine Segment-Grenze gehen. (muß
von der aufrufenden Routine sichergestellt werden!)
Sinnvollerweise sollte für die Puffergröße ein Vielfaches
von 512xD (Sektorgröße) gewählt werden.
■ Definition der Puffer-Tabelle
PUFFER_TABELLE STRUC [BX]
puffer_seg dw ?
puffer_off dw ?
puffer_len dw ?
ENDS
----------------------------
RenameFile
Funktion: Verschieben oder umbenennen einer Datei
Eingabe: DS:SI -> alter Dateiname
ES:DI -> neuer Dateiname
Ausgabe: CF = 0 ->> okay, Datei umbenannt
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
DeleteFile
Funktion: Löschen einer Datei
Eingabe: DS:SI -> Dateiname
Ausgabe: CF = 0 ->> okay, Datei gelöscht
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
GetSetAttributes
Funktion: Lesen/Setzen der Attribute einer Datei
Eingabe: AL = 0 ->> Attribute Lesen
Ausgabe: AX = Attribute
AL = 1 ->> Attribute Schreiben
Eingabe: CX = Attribute
DS:SI -> Dateiname
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
ExistFile
Funktion: Feststellen, ob eine Datei existiert
Eingabe: DS:SI -> Dateiname oder Maske
Ausgabe: CF = 0 ->> Datei existiert
CF = 1 ->> Datei existiert nicht
Bes.: Benötigt ca. 550 Byte Platz auf dem Stack
Die Routine findet auch Geräte.
Hinweis: Ob ein Directory existiert kann überprüft werden,
indem man testet, ob das Gerät CON im entsprechenden
Directory vorhanden ist. Falls hierauf der Fehlercode
03h zurück gegeben wird, existiert das Directory nicht.
---------------------------
FileTimeToDOSTime
Funktion: Konvertiert die Zeit vom Datei-Format ins DOS-Format
Eingabe: CX = Zeit im Datei-Format
Ausgabe: DX und CX enthalten die Zeit im DOS-Format:
CL = Minuten
CH = Stunden
DL = Sekunden
DH = Hundertstel Sekunden (immer 0)
Bes.: Die angegebene Zeit wird NICHT überprüft.
Die Sekunden werden für Dateien nur in 2-Sekunden-
Interavallen gespeichert.
---------------------------
DOSTimeToFileTime
Funktion: Konvertiert die Zeit vom DOS-Format ins Datei-Format
Eingabe: DX und CX enthalten die Zeit im DOS-Format:
CL = Minuten
CH = Stunden
DL = Sekunden
Ausgabe: CF = 0 ->> okay
CX = Zeit im Datei-Format
CF = 1 ->> Fehler, falsche Zeit angegeben
Bes.: Die Sekunden werden für Dateien nur in 2-Sekunden-
Interavallen gespeichert.
---------------------------
FileDateToDOSDate
Funktion: Konvertiert das Datum vom Datei-Format ins DOS-Format
Eingabe: DX = Datum im Datei-Format
Ausgabe: DX und CX enthalten das Datum im DOS-Format:
CX = Jahre
DH = Monate
DL = Tage
Bes.: Das angegebene Datum wird NICHT überprüft.
---------------------------
DOSDateToFileDate
Funktion: Konvertiert das Datum vom DOS-Format ins Datei-Format
Eingabe: DX und CX enthalten das Datum im DOS-Format:
CX = Jahre
DH = Monate
DL = Tage
Ausgabe: CF = 0 ->> okay
DX = Datum im Datei-Format
CF = 1 ->> Fehler, falsches Datum angegeben